//#include "Adt.h"
//#include "WowHelper.h"
//
//Adt::Adt()
//{
//}
//
//Adt::~Adt()
//{
//}
//
//void Adt::Load(char* path)
//{
//	m_pVertexBuffer = new VertexBuffer();
//
//	FILE* file = std::fopen(path, "rb");
//	AdtMcin mcin[256];
//
//	std::fseek(file, 0x14, SEEK_SET);
//	std::fread(&m_oHeader, sizeof(AdtHeader), 1, file);
//	std::fseek(file, 0x14 + m_oHeader.McinOffset, SEEK_SET);
//
//	unsigned char fcc[4];
//
//	std::fread(fcc, sizeof(unsigned char), 4, file);
//	std::fseek(file, 4, SEEK_CUR);
//	std::fread(&mcin, sizeof(AdtMcin), 256, file);
//
//	for(int a = 0; a < 256; a++)
//	{
//		std::fseek(file, mcin[a].McnkOffset, SEEK_SET);
//		std::fread(&m_pChunks[a], sizeof(AdtMcnk), 1, file);
//	}
//
//	for(int a = 0; a < 256; a++)
//	{
//		int lol = 12 + mcin[a].McnkOffset + sizeof(AdtMcnk);
//
//		std::fseek(file, lol, SEEK_SET);
//		std::fread(&m_pHeights[a], sizeof(float), 145, file);
//	}
//
//
//
//	std::fclose(file);
//
//	CreateVertexBuffer();
//	CreateIndexBuffer();
//}
//
//void Adt::CreateIndexBuffer()
//{
//	int indicesIndex = 0;
//	unsigned int indices[98304 * 2];
//
//	for(int chunkY = 0; chunkY < 16; chunkY++)
//	{
//		for(int chunkX = 0; chunkX < 16; chunkX++)
//		{
//			int index = (chunkX + (chunkY * 16)) * 145;
//
//			for(int row = 0; row < 8; row++)
//			{
//				for(int column = 0; column < 8; column++)
//				{
//					int ints[5] = { index, index, index, index, index };
//
//					ints[0] += (17 * row) + 9 + column;	// Middle
//					ints[1] += (row * 17) + column;		// Top left
//					ints[2] = ints[1] + 17;				// Bottom left
//					ints[3] = ints[1] + 1;				// Top right
//					ints[4] = ints[2] + 1;				// Bottom right
//
//					//indices[indicesIndex++] = ints[1];
//					//indices[indicesIndex++] = ints[2];
//					//indices[indicesIndex++] = ints[4];
//
//					//indices[indicesIndex++] = ints[1];
//					//indices[indicesIndex++] = ints[4];
//					//indices[indicesIndex++] = ints[3];
//
//					// Left
//					indices[indicesIndex++] = ints[0];
//					indices[indicesIndex++] = ints[1];
//					indices[indicesIndex++] = ints[2];
//
//					// Top
//					indices[indicesIndex++] = ints[0];
//					indices[indicesIndex++] = ints[3];
//					indices[indicesIndex++] = ints[1];
//
//					// Right
//					indices[indicesIndex++] = ints[0];
//					indices[indicesIndex++] = ints[4];
//					indices[indicesIndex++] = ints[3];
//
//					// Bottom
//					indices[indicesIndex++] = ints[0];
//					indices[indicesIndex++] = ints[2];
//					indices[indicesIndex++] = ints[4];
//				}
//			}
//		}
//	}
//
//	m_pIndexBuffer = new IndexBuffer();
//	m_pIndexBuffer->SetData(indices, sizeof(unsigned int) * 98304 * 2);
//}
//
//void Adt::CreateVertexBuffer()
//{
//	Vertex* vertices = new Vertex[37120];
//
//	float rowSpacing = 533.33333333f / 16.0f / 16.0f;
//	float columnSpacingOuter = 533.33333333f / 16.0f / 8.0f;
//	float columnSpacingInnter = 533.33333333f / 16.0f / 7.0f;
//
//	for(int chunkY = 0; chunkY < 16; chunkY++)
//	{
//		for(int chunkX = 0; chunkX < 16; chunkX++)
//		{
//			int chunkIndex = chunkX + (chunkY * 16);
//			int heightIndex = 0;
//			int vertexIndex = 0;
//
//			AdtMcnk* chunk = &m_pChunks[chunkIndex];
//
//			for(int row = 0; row < 17; row++)
//			{
//				if(row % 2 == 0)	// Outer
//				{
//					for(int x = 0; x < 9; x++)
//					{
//						Vector3f position = chunk->Position;
//
//						Convert(&position);
//
//						position.X -= columnSpacingOuter * x;
//						position.Y += m_pHeights[chunkIndex][heightIndex];
//						position.Z -= row * rowSpacing;
//
//						vertices[(chunkIndex * 145) + heightIndex].Position = position;
//
//						heightIndex++;
//					}
//				}
//				else // Inner
//				{
//					for(int i = 0; i < 8; i++)
//					{
//						Vector3f position = chunk->Position;
//
//						Convert(&position);
//
//						position.X -= (columnSpacingOuter / 2.0f) + columnSpacingOuter * i;
//						position.Y += m_pHeights[chunkIndex][heightIndex];
//						position.Z -= row * rowSpacing;
//
//						vertices[(chunkIndex * 145) + heightIndex].Position = position;
//
//						heightIndex++;
//					}
//				}
//			}
//		}
//	}
//
//	m_pVertexBuffer->SetData((void*)vertices, sizeof(Vertex) * 37120);
//	
//	delete [] vertices;
//}
//
//void Adt::Draw() const
//{
//	glDisable(GL_TEXTURE_2D);
//	glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_pVertexBuffer->GetID());
//	glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, m_pIndexBuffer->GetID());
//	glEnableClientState(GL_VERTEX_ARRAY);
//	glEnableClientState(GL_COLOR_ARRAY);
//	glVertexPointer(3, GL_FLOAT, sizeof(Vertex), 0);
//	glColorPointer(4, GL_FLOAT, sizeof(Vertex), BUFFER_OFFSET(12));
//	glPolygonMode(GL_FRONT, GL_FILL);
//	glDrawElements(GL_TRIANGLES, m_pIndexBuffer->GetElementCount(), GL_UNSIGNED_INT, BUFFER_OFFSET(0));
//	glDisableClientState(GL_VERTEX_ARRAY);
//	glDisableClientState(GL_COLOR_ARRAY);
//	glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0);
//	glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
//}